﻿2026-05-17T23:54:24.3185353Z ##[group]Run pnpm verify:phase-5
2026-05-17T23:54:24.3185910Z [36;1mpnpm verify:phase-5[0m
2026-05-17T23:54:24.3215238Z shell: /usr/bin/bash -e {0}
2026-05-17T23:54:24.3215678Z env:
2026-05-17T23:54:24.3216033Z   SKIP_STAGING_VERIFY: false
2026-05-17T23:54:24.3216682Z   SKIP_PHASE_4_CARRYOVER: 
2026-05-17T23:54:24.3217077Z   SKIP_STAGING_SMOKE: false
2026-05-17T23:54:24.3217601Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-17T23:54:24.3218186Z   SKIP_PHASE_3_CARRYOVER: 1
2026-05-17T23:54:24.3218613Z   SKIP_TRACE_CHECK: 1
2026-05-17T23:54:24.3218989Z ##[endgroup]
2026-05-17T23:54:24.7603009Z 
2026-05-17T23:54:24.7623847Z > rebno@0.0.0 verify:phase-5 /home/runner/work/rebno/rebno
2026-05-17T23:54:24.7663704Z > node scripts/verify-phase-5.mjs
2026-05-17T23:54:24.7664149Z 
2026-05-17T23:54:24.8102332Z 
2026-05-17T23:54:24.8114091Z === Phase 4 carry-over: verify-phase-4 ===
2026-05-17T23:54:24.8120710Z >>> pnpm verify:phase-4
2026-05-17T23:54:25.2433683Z 
2026-05-17T23:54:25.2454014Z > rebno@0.0.0 verify:phase-4 /home/runner/work/rebno/rebno
2026-05-17T23:54:25.2455103Z > node scripts/verify-phase-4.mjs
2026-05-17T23:54:25.2473206Z 
2026-05-17T23:54:25.2893264Z 
2026-05-17T23:54:25.2903815Z === Workspace: typecheck ===
2026-05-17T23:54:25.2904614Z >>> pnpm -r typecheck
2026-05-17T23:54:25.6466157Z Scope: 5 of 6 workspace projects
2026-05-17T23:54:25.6515632Z packages/db typecheck$ tsc --noEmit
2026-05-17T23:54:25.6524285Z packages/game-logic typecheck$ tsc --noEmit
2026-05-17T23:54:28.0714457Z packages/game-logic typecheck: Done
2026-05-17T23:54:28.0773813Z packages/protocol typecheck$ tsc --noEmit
2026-05-17T23:54:30.3167192Z packages/db typecheck: Done
2026-05-17T23:54:31.6040536Z packages/protocol typecheck: Done
2026-05-17T23:54:31.6049019Z apps/client typecheck$ tsc --noEmit
2026-05-17T23:54:31.6052022Z apps/server typecheck$ tsc --noEmit
2026-05-17T23:54:43.7434425Z apps/client typecheck: Done
2026-05-17T23:54:44.1941659Z apps/server typecheck: Done
2026-05-17T23:54:44.2013554Z 
2026-05-17T23:54:44.2014336Z === Lint: protocol-sync ===
2026-05-17T23:54:44.2015052Z >>> pnpm lint:protocol-sync
2026-05-17T23:54:44.4810455Z 
2026-05-17T23:54:44.4811604Z > rebno@0.0.0 lint:protocol-sync /home/runner/work/rebno/rebno
2026-05-17T23:54:44.4812686Z > node tools/scripts/lint-protocol-sync.mjs
2026-05-17T23:54:44.4813364Z 
2026-05-17T23:54:44.5127844Z lint-protocol-sync: OK
2026-05-17T23:54:44.5213676Z 
2026-05-17T23:54:44.5214507Z === Lint: game-logic-purity ===
2026-05-17T23:54:44.5215244Z >>> pnpm lint:game-logic-purity
2026-05-17T23:54:44.7987839Z 
2026-05-17T23:54:44.7988910Z > rebno@0.0.0 lint:game-logic-purity /home/runner/work/rebno/rebno
2026-05-17T23:54:44.7989875Z > node tools/scripts/lint-game-logic-purity.mjs
2026-05-17T23:54:44.7990443Z 
2026-05-17T23:54:44.8297190Z lint-game-logic-purity: OK (8 file(s) clean)
2026-05-17T23:54:44.8388602Z 
2026-05-17T23:54:44.8389449Z === Lint: better-auth-schema-sync ===
2026-05-17T23:54:44.8390305Z >>> pnpm lint:better-auth-schema-sync
2026-05-17T23:54:45.1165461Z 
2026-05-17T23:54:45.1166613Z > rebno@0.0.0 lint:better-auth-schema-sync /home/runner/work/rebno/rebno
2026-05-17T23:54:45.1167846Z > node tools/scripts/lint-better-auth-schema-sync.mjs
2026-05-17T23:54:45.1168445Z 
2026-05-17T23:54:46.5775340Z lint-better-auth-schema-sync: OK
2026-05-17T23:54:46.5861931Z 
2026-05-17T23:54:46.5862784Z === Lint: rate-limit-budgets ===
2026-05-17T23:54:46.5863784Z >>> pnpm lint:rate-limit-budgets
2026-05-17T23:54:46.8681776Z 
2026-05-17T23:54:46.8682759Z > rebno@0.0.0 lint:rate-limit-budgets /home/runner/work/rebno/rebno
2026-05-17T23:54:46.8683860Z > node tools/scripts/lint-rate-limit-budgets.mjs
2026-05-17T23:54:46.8684353Z 
2026-05-17T23:54:46.8993615Z lint-rate-limit-budgets: OK (5 D-22 budgets locked)
2026-05-17T23:54:46.9090675Z 
2026-05-17T23:54:46.9091532Z === Lint: no-clipboard-rce ===
2026-05-17T23:54:46.9092235Z >>> pnpm lint:no-clipboard-rce
2026-05-17T23:54:47.1948072Z 
2026-05-17T23:54:47.1949160Z > rebno@0.0.0 lint:no-clipboard-rce /home/runner/work/rebno/rebno
2026-05-17T23:54:47.1950730Z > node tools/scripts/lint-no-clipboard-rce.mjs
2026-05-17T23:54:47.1951164Z 
2026-05-17T23:54:47.2281933Z lint-no-clipboard-rce: OK (23 file(s) clean)
2026-05-17T23:54:47.2372603Z 
2026-05-17T23:54:47.2374262Z === Lint: room-layout ===
2026-05-17T23:54:47.2374894Z >>> pnpm lint:room-layout
2026-05-17T23:54:47.5204513Z 
2026-05-17T23:54:47.5205571Z > rebno@0.0.0 lint:room-layout /home/runner/work/rebno/rebno
2026-05-17T23:54:47.5206407Z > node tools/scripts/lint-room-layout.mjs
2026-05-17T23:54:47.5206855Z 
2026-05-17T23:54:47.5539775Z lint-room-layout: OK
2026-05-17T23:54:47.5646457Z 
2026-05-17T23:54:47.5647207Z === ADR 0004 lint ===
2026-05-17T23:54:47.5647812Z >>> pnpm lint:adr:0004
2026-05-17T23:54:47.8468811Z 
2026-05-17T23:54:47.8469806Z > rebno@0.0.0 lint:adr:0004 /home/runner/work/rebno/rebno
2026-05-17T23:54:47.8470982Z > node tools/asset-catalog/scripts/lint-adr.mjs docs/adr/0004-room-hot-reload.md --no-matrix
2026-05-17T23:54:47.8471725Z 
2026-05-17T23:54:47.8745672Z OK: ADR docs/adr/0004-room-hot-reload.md validated (no-matrix mode — Michael Nygard sections present)
2026-05-17T23:54:47.8831778Z 
2026-05-17T23:54:47.8832561Z === Drizzle: emit-check ===
2026-05-17T23:54:47.8836961Z >>> pnpm db:emit-check
2026-05-17T23:54:48.1633211Z 
2026-05-17T23:54:48.1634252Z > rebno@0.0.0 db:emit-check /home/runner/work/rebno/rebno
2026-05-17T23:54:48.1636932Z > pnpm -C packages/db exec drizzle-kit generate && node -e "require('fs').copyFileSync('packages/db/migrations/0001_baseline.sql','docs/extracted-server/0001_baseline.sql')" && git diff --exit-code packages/db/migrations/0001_baseline.sql docs/extracted-server/0001_baseline.sql
2026-05-17T23:54:48.1638757Z 
2026-05-17T23:54:48.5830278Z No config path provided, using default 'drizzle.config.ts'
2026-05-17T23:54:48.5833548Z Reading config file '/home/runner/work/rebno/rebno/packages/db/drizzle.config.ts'
2026-05-17T23:54:48.9758507Z 8 tables
2026-05-17T23:54:48.9759364Z accounts 8 columns 1 indexes 0 fks
2026-05-17T23:54:48.9760185Z audit_log 6 columns 0 indexes 2 fks
2026-05-17T23:54:48.9760880Z characters 9 columns 0 indexes 1 fks
2026-05-17T23:54:48.9764835Z inventory_items 4 columns 0 indexes 1 fks
2026-05-17T23:54:48.9765753Z legacy_credentials_staging 6 columns 0 indexes 0 fks
2026-05-17T23:54:48.9766640Z message_board_replies 5 columns 0 indexes 2 fks
2026-05-17T23:54:48.9767477Z message_board_topics 7 columns 0 indexes 1 fks
2026-05-17T23:54:48.9768175Z sessions 5 columns 0 indexes 1 fks
2026-05-17T23:54:48.9768608Z 
2026-05-17T23:54:48.9769370Z No schema changes, nothing to migrate 😴
2026-05-17T23:54:49.1292489Z 
2026-05-17T23:54:49.1293460Z === Drizzle: schema-sync ===
2026-05-17T23:54:49.1294151Z >>> pnpm lint:schema-sync
2026-05-17T23:54:49.4066444Z 
2026-05-17T23:54:49.4067482Z > rebno@0.0.0 lint:schema-sync /home/runner/work/rebno/rebno
2026-05-17T23:54:49.4070797Z > node -e "const a=require('fs').readFileSync('packages/db/migrations/0001_baseline.sql');const b=require('fs').readFileSync('docs/extracted-server/0001_baseline.sql');if(Buffer.compare(a,b)!==0){console.error('docs/extracted-server/0001_baseline.sql out of sync with packages/db/migrations/0001_baseline.sql');process.exit(1)}console.log('OK')"
2026-05-17T23:54:49.4073392Z 
2026-05-17T23:54:49.4323752Z OK
2026-05-17T23:54:49.4419692Z 
2026-05-17T23:54:49.4420498Z === Drizzle: source-comments ===
2026-05-17T23:54:49.4421226Z >>> pnpm lint:source-comments
2026-05-17T23:54:49.7380812Z 
2026-05-17T23:54:49.7381875Z > rebno@0.0.0 lint:source-comments /home/runner/work/rebno/rebno
2026-05-17T23:54:49.7383149Z > pnpm -C packages/db run lint:source-comments
2026-05-17T23:54:49.7383743Z 
2026-05-17T23:54:50.0212996Z 
2026-05-17T23:54:50.0214187Z > @rebno/db@0.1.0 lint:source-comments /home/runner/work/rebno/rebno/packages/db
2026-05-17T23:54:50.0215287Z > node scripts/check-source-comments.mjs
2026-05-17T23:54:50.0215835Z 
2026-05-17T23:54:50.0494298Z check-source-comments: OK (50 columns, all SOURCE-cited)
2026-05-17T23:54:50.0654506Z 
2026-05-17T23:54:50.0655287Z === Workspace: test ===
2026-05-17T23:54:50.0656356Z >>> pnpm -r test
2026-05-17T23:54:50.3519133Z Scope: 5 of 6 workspace projects
2026-05-17T23:54:50.3567180Z packages/db test$ vitest run
2026-05-17T23:54:50.3575873Z packages/game-logic test$ vitest run
2026-05-17T23:54:50.8462291Z packages/game-logic test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/game-logic[39m
2026-05-17T23:54:50.8483056Z packages/db test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/db[39m
2026-05-17T23:54:51.2554948Z packages/game-logic test:  [32m✓[39m test/walkable-edge.test.ts [2m([22m[2m11 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-17T23:54:51.5134368Z packages/game-logic test:  [32m✓[39m test/step-bno-fidelity.test.ts [2m([22m[2m13 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T23:54:51.7304938Z packages/game-logic test:  [32m✓[39m test/edge-parity.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T23:54:51.8268984Z packages/db test:  [32m✓[39m tests/promotion.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-17T23:54:51.9630486Z packages/game-logic test:  [32m✓[39m test/collision-axis-slide.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-17T23:54:52.0519665Z packages/db test:  [32m✓[39m tests/save-format-traceability.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:54:52.1735005Z packages/game-logic test:  [32m✓[39m test/wall-slide.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T23:54:52.3895068Z packages/game-logic test:  [32m✓[39m test/golden.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T23:54:52.5875401Z packages/game-logic test:  [32m✓[39m test/navi-mask-bbox.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T23:54:52.8018829Z packages/game-logic test:  [32m✓[39m test/movement-constants.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-17T23:54:52.8165473Z packages/db test:  [32m✓[39m tests/schema-shape.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 11[2mms[22m[39m
2026-05-17T23:54:52.8224395Z packages/db test: [2m Test Files [22m [1m[32m3 passed[39m[22m[90m (3)[39m
2026-05-17T23:54:52.8231130Z packages/db test: [2m      Tests [22m [1m[32m22 passed[39m[22m[90m (22)[39m
2026-05-17T23:54:52.8251062Z packages/db test: [2m   Start at [22m 23:54:50
2026-05-17T23:54:52.8262754Z packages/db test: [2m   Duration [22m 1.97s[2m (transform 175ms, setup 0ms, import 1.39s, tests 26ms, environment 0ms)[22m
2026-05-17T23:54:52.8472733Z packages/db test: Done
2026-05-17T23:54:52.8479065Z packages/protocol test$ vitest run
2026-05-17T23:54:53.0196177Z packages/game-logic test:  [32m✓[39m test/sprite-state-machine.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:54:53.2479062Z packages/game-logic test:  [32m✓[39m test/platform-cycle.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 15[2mms[22m[39m
2026-05-17T23:54:53.3585055Z packages/protocol test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/protocol[39m
2026-05-17T23:54:53.4707413Z packages/game-logic test:  [32m✓[39m test/accumulator.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:54:53.6905136Z packages/game-logic test:  [32m✓[39m test/run-speed.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T23:54:53.7758744Z packages/protocol test:  [32m✓[39m test/intents.test.ts [2m([22m[2m25 tests[22m[2m)[22m[32m 20[2mms[22m[39m
2026-05-17T23:54:53.9174760Z packages/game-logic test:  [32m✓[39m test/step-pass-through.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T23:54:54.0894986Z packages/protocol test:  [32m✓[39m test/codec.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m 20[2mms[22m[39m
2026-05-17T23:54:54.1315053Z packages/game-logic test:  [32m✓[39m test/rng.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:54:54.1420812Z packages/game-logic test: [2m Test Files [22m [1m[32m14 passed[39m[22m[90m (14)[39m
2026-05-17T23:54:54.1434629Z packages/game-logic test: [2m      Tests [22m [1m[32m75 passed[39m[22m[90m (75)[39m
2026-05-17T23:54:54.1452413Z packages/game-logic test: [2m   Start at [22m 23:54:50
2026-05-17T23:54:54.1455992Z packages/game-logic test: [2m   Duration [22m 3.28s[2m (transform 288ms, setup 0ms, import 552ms, tests 118ms, environment 2ms)[22m
2026-05-17T23:54:54.1801007Z packages/game-logic test: Done
2026-05-17T23:54:54.2679927Z packages/protocol test:  [32m✓[39m test/state.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T23:54:54.4020329Z packages/protocol test:  [32m✓[39m test/anim-state.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T23:54:54.5380993Z packages/protocol test:  [32m✓[39m test/schema-shape.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T23:54:54.5420686Z packages/protocol test: [2m Test Files [22m [1m[32m5 passed[39m[22m[90m (5)[39m
2026-05-17T23:54:54.5427476Z packages/protocol test: [2m      Tests [22m [1m[32m59 passed[39m[22m[90m (59)[39m
2026-05-17T23:54:54.5433493Z packages/protocol test: [2m   Start at [22m 23:54:53
2026-05-17T23:54:54.5435133Z packages/protocol test: [2m   Duration [22m 1.17s[2m (transform 181ms, setup 0ms, import 342ms, tests 55ms, environment 1ms)[22m
2026-05-17T23:54:54.5739830Z packages/protocol test: Done
2026-05-17T23:54:54.5745737Z apps/client test$ vitest run --exclude 'test/e2e/**'
2026-05-17T23:54:54.5747619Z apps/server test$ vitest run --exclude 'test/**/*.integ.test.ts'
2026-05-17T23:54:55.0414963Z apps/server test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/apps/server[39m
2026-05-17T23:54:55.1789440Z apps/client test: [1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/home/runner/work/rebno/rebno/apps/client[39m
2026-05-17T23:54:56.1264951Z apps/server test:  [32m✓[39m test/persistence.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 54[2mms[22m[39m
2026-05-17T23:54:56.5838652Z apps/server test:  [32m✓[39m test/layout-derive.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 114[2mms[22m[39m
2026-05-17T23:54:56.6006312Z apps/client test:  [32m✓[39m src/__test__/nameplate-stability.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 43[2mms[22m[39m
2026-05-17T23:54:56.8335106Z apps/server test:  [32m✓[39m test/rate-limit.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T23:54:57.1074901Z apps/server test:  [32m✓[39m test/static-assets.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T23:54:57.3504682Z apps/server test:  [32m✓[39m test/room-key.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 26[2mms[22m[39m
2026-05-17T23:54:57.5934814Z apps/server test: {"level":40,"time":1779062097588,"pid":3280,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-17T23:54:57.5970238Z apps/server test:  [32m✓[39m test/staging-invite.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 12[2mms[22m[39m
2026-05-17T23:54:57.6001862Z apps/server test: {"level":40,"time":1779062097592,"pid":3280,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-17T23:54:57.6003893Z apps/server test: {"level":40,"time":1779062097593,"pid":3280,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-17T23:54:58.2570914Z apps/client test: [90mstderr[2m | src/__test__/game-scene.test.ts[2m > [22m[2mscenes/GameScene[2m > [22m[2mtest 5: onRoomLayout calls verifyRoomLayout first; render skipped on false
2026-05-17T23:54:58.2594837Z apps/client test: [22m[39mroom_layout signature did not verify — rendering anyway (defense-in-depth; see 06.1-D40-SPIKE.md) mvp-lobby 000
2026-05-17T23:54:58.3670000Z apps/client test:  [32m✓[39m src/__test__/game-scene.test.ts [2m([22m[2m11 tests[22m[2m)[22m[32m 285[2mms[22m[39m
2026-05-17T23:54:58.6259056Z apps/server test: {"level":30,"time":1779062098623,"pid":3291,"hostname":"runnervmrw5os","password":"[Redacted]","session_token":"[Redacted]","msg":"login"}
2026-05-17T23:54:58.6344551Z apps/server test:  [32m✓[39m test/otel-init.test.ts [2m([22m[2m4 tests[22m[2m)[22m[33m 763[2mms[22m[39m
2026-05-17T23:54:58.6384913Z apps/server test:      [33m[2m✓[22m[39m does not throw when OTEL_EXPORTER_OTLP_ENDPOINT is unset [33m 616[2mms[22m[39m
2026-05-17T23:54:59.0093118Z apps/server test: {"level":40,"time":1779062099006,"pid":3327,"hostname":"runnervmrw5os","msg_type":"position_update","sessionId":"sid-1","issue":"[\n  {\n    \"code\": \"unrecognized_keys\",\n    \"keys\": [\n      \"account_id\"\n    ],\n    \"path\": [],\n    \"message\": \"Unrecognized key(s) in object: 'account_id'\"\n  }\n]","msg":"invalid_intent"}
2026-05-17T23:54:59.0190442Z apps/server test:  [32m✓[39m test/position-update.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 19[2mms[22m[39m
2026-05-17T23:54:59.0204598Z apps/server test: {"level":40,"time":1779062099009,"pid":3327,"hostname":"runnervmrw5os","msg_type":"position_update","account_id":"acct-1","sessionId":"sid-1","msg":"rate_limit_dropped"}
2026-05-17T23:54:59.5681933Z apps/client test:  [32m✓[39m src/__test__/sprite-state-machine.teleport-gate.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 89[2mms[22m[39m
2026-05-17T23:54:59.9905093Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 1: fresh DB — migrate creates accounts table and records migration row
2026-05-17T23:54:59.9910919Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-a1EL27/rebno.db
2026-05-17T23:54:59.9912557Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T23:55:00.0639163Z apps/server test: [90mstderr[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 1: fresh DB — migrate creates accounts table and records migration row
2026-05-17T23:55:00.0694853Z apps/server test: [22m[39m[run-migrations] uat-seed soft-failed (continuing): SqliteError: no such table: user
2026-05-17T23:55:00.0734969Z apps/server test:     at Database.prepare (/home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/better-sqlite3@12.9.0/node_modules/[4mbetter-sqlite3[24m/lib/methods/wrappers.js:5:21)
2026-05-17T23:55:00.0754435Z apps/server test:     at seedOne [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:62:10[90m)[39m
2026-05-17T23:55:00.0790777Z apps/server test:     at seedUatAccounts [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:108:11[90m)[39m
2026-05-17T23:55:00.0818032Z apps/server test:     at main [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/run-migrations.js:176:15[90m)[39m
2026-05-17T23:55:00.0827401Z apps/server test: [90m    at processTicksAndRejections (node:internal/process/task_queues:103:5)[39m
2026-05-17T23:55:00.0829307Z apps/server test:     at [90m/home/runner/work/rebno/rebno/apps/server/[39mtest/run-migrations.test.ts:44:18
2026-05-17T23:55:00.0839805Z apps/server test:     at file:///home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/@vitest+runner@4.1.5/node_modules/[4m@vitest/runner[24m/dist/chunk-artifact.js:1903:20 {
2026-05-17T23:55:00.0841449Z apps/server test:   code: [32m'SQLITE_ERROR'[39m
2026-05-17T23:55:00.0842088Z apps/server test: }
2026-05-17T23:55:00.0844079Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 1: fresh DB — migrate creates accounts table and records migration row
2026-05-17T23:55:00.0845748Z apps/server test: [22m[39m[run-migrations] OK
2026-05-17T23:55:00.0889834Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 2: pre-bootstrapped DB (Assumption A7) — reconcile seeds row before migrate runs
2026-05-17T23:55:00.0899053Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-Vua7aq/rebno.db
2026-05-17T23:55:00.0901452Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T23:55:00.0910275Z apps/server test: [run-migrations] reconciled __drizzle_migrations for pre-bootstrap DB (Assumption A7) — seeded 0001_baseline
2026-05-17T23:55:00.0940678Z apps/server test: [90mstderr[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 2: pre-bootstrapped DB (Assumption A7) — reconcile seeds row before migrate runs
2026-05-17T23:55:00.0954701Z apps/server test: [22m[39m[run-migrations] uat-seed soft-failed (continuing): SqliteError: no such table: user
2026-05-17T23:55:00.0959298Z apps/server test:     at Database.prepare (/home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/better-sqlite3@12.9.0/node_modules/[4mbetter-sqlite3[24m/lib/methods/wrappers.js:5:21)
2026-05-17T23:55:00.0975555Z apps/server test:     at seedOne [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:62:10[90m)[39m
2026-05-17T23:55:00.0993267Z apps/server test:     at seedUatAccounts [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:108:11[90m)[39m
2026-05-17T23:55:00.1007630Z apps/server test:     at main [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/run-migrations.js:176:15[90m)[39m
2026-05-17T23:55:00.1018156Z apps/server test: [90m    at processTicksAndRejections (node:internal/process/task_queues:103:5)[39m
2026-05-17T23:55:00.1049911Z apps/server test:     at [90m/home/runner/work/rebno/rebno/apps/server/[39mtest/run-migrations.test.ts:72:18
2026-05-17T23:55:00.1069696Z apps/server test:     at file:///home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/@vitest+runner@4.1.5/node_modules/[4m@vitest/runner[24m/dist/chunk-artifact.js:1903:20 {
2026-05-17T23:55:00.1103866Z apps/server test:   code: [32m'SQLITE_ERROR'[39m
2026-05-17T23:55:00.1110178Z apps/server test: }
2026-05-17T23:55:00.1117615Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 2: pre-bootstrapped DB (Assumption A7) — reconcile seeds row before migrate runs
2026-05-17T23:55:00.1120054Z apps/server test: [22m[39m[run-migrations] OK
2026-05-17T23:55:00.1124465Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T23:55:00.1126882Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-NmS8yn/rebno.db
2026-05-17T23:55:00.1143795Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T23:55:00.1163822Z apps/server test: [90mstderr[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T23:55:00.1191025Z apps/server test: [22m[39m[run-migrations] uat-seed soft-failed (continuing): SqliteError: no such table: user
2026-05-17T23:55:00.1205394Z apps/server test:     at Database.prepare (/home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/better-sqlite3@12.9.0/node_modules/[4mbetter-sqlite3[24m/lib/methods/wrappers.js:5:21)
2026-05-17T23:55:00.1218257Z apps/server test:     at seedOne [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:62:10[90m)[39m
2026-05-17T23:55:00.1220644Z apps/server test:     at seedUatAccounts [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:108:11[90m)[39m
2026-05-17T23:55:00.1222578Z apps/server test:     at main [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/run-migrations.js:176:15[90m)[39m
2026-05-17T23:55:00.1224661Z apps/server test: [90m    at processTicksAndRejections (node:internal/process/task_queues:103:5)[39m
2026-05-17T23:55:00.1226318Z apps/server test:     at [90m/home/runner/work/rebno/rebno/apps/server/[39mtest/run-migrations.test.ts:91:19
2026-05-17T23:55:00.1228706Z apps/server test:     at file:///home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/@vitest+runner@4.1.5/node_modules/[4m@vitest/runner[24m/dist/chunk-artifact.js:1903:20 {
2026-05-17T23:55:00.1230315Z apps/server test:   code: [32m'SQLITE_ERROR'[39m
2026-05-17T23:55:00.1231023Z apps/server test: }
2026-05-17T23:55:00.1232656Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T23:55:00.1234258Z apps/server test: [22m[39m[run-migrations] OK
2026-05-17T23:55:00.1235820Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T23:55:00.1237345Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-NmS8yn/rebno.db
2026-05-17T23:55:00.1238529Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T23:55:00.1240452Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T23:55:00.1241785Z apps/server test: [22m[39m[run-migrations] OK
2026-05-17T23:55:00.1243633Z apps/server test: [90mstderr[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T23:55:00.1245446Z apps/server test: [22m[39m[run-migrations] uat-seed soft-failed (continuing): SqliteError: no such table: user
2026-05-17T23:55:00.1247578Z apps/server test:     at Database.prepare (/home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/better-sqlite3@12.9.0/node_modules/[4mbetter-sqlite3[24m/lib/methods/wrappers.js:5:21)
2026-05-17T23:55:00.1249707Z apps/server test:     at seedOne [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:62:10[90m)[39m
2026-05-17T23:55:00.1261773Z apps/server test:     at seedUatAccounts [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:108:11[90m)[39m
2026-05-17T23:55:00.1264684Z apps/server test:     at main [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/run-migrations.js:176:15[90m)[39m
2026-05-17T23:55:00.1266389Z apps/server test: [90m    at processTicksAndRejections (node:internal/process/task_queues:103:5)[39m
2026-05-17T23:55:00.1268062Z apps/server test:     at [90m/home/runner/work/rebno/rebno/apps/server/[39mtest/run-migrations.test.ts:93:20
2026-05-17T23:55:00.1270341Z apps/server test:     at file:///home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/@vitest+runner@4.1.5/node_modules/[4m@vitest/runner[24m/dist/chunk-artifact.js:1903:20 {
2026-05-17T23:55:00.1272055Z apps/server test:   code: [32m'SQLITE_ERROR'[39m
2026-05-17T23:55:00.1272711Z apps/server test: }
2026-05-17T23:55:00.1274429Z apps/server test:  [32m✓[39m test/run-migrations.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 156[2mms[22m[39m
2026-05-17T23:55:00.4014858Z apps/server test:  [32m✓[39m test/log.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 16[2mms[22m[39m
2026-05-17T23:55:00.5771024Z apps/client test:  [32m✓[39m src/__test__/nameplate.test.ts [2m([22m[2m12 tests[22m[2m)[22m[32m 61[2mms[22m[39m
2026-05-17T23:55:00.6155022Z apps/server test:  [32m✓[39m test/admin-stubs.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:55:00.8546602Z apps/server test:  [32m✓[39m test/legacy-login.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 14[2mms[22m[39m
2026-05-17T23:55:01.1943126Z apps/server test: {"level":40,"time":1779062101189,"pid":3410,"hostname":"runnervmrw5os","msg_type":"set_sprite_override","sessionId":"sid-1","issue":"[\n  {\n    \"received\": \"admin_form\",\n    \"code\": \"invalid_enum_value\",\n    \"options\": [\n      \"hexport_in\",\n      \"hexport_out\",\n      \"tele_in\",\n      \"tele_out\",\n      \"ncol_1\",\n      \"ncol_2\",\n      \"ncol_3\",\n      \"ncol_4\",\n      \"jokershell\",\n      \"watching\",\n      \"none\"\n    ],\n    \"path\": [\n      \"sprite_id\"\n    ],\n    \"message\": \"Invalid enum value. Expected 'hexport_in' | 'hexport_out' | 'tele_in' | 'tele_out' | 'ncol_1' | 'ncol_2' | 'ncol_3' | 'ncol_4' | 'jokershell' | 'watching' | 'none', received 'admin_form'\"\n  }\n]","msg":"invalid_intent"}
2026-05-17T23:55:01.1997454Z apps/server test:  [32m✓[39m test/sprite-override.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 25[2mms[22m[39m
2026-05-17T23:55:01.2013416Z apps/server test: {"level":40,"time":1779062101191,"pid":3410,"hostname":"runnervmrw5os","msg_type":"set_sprite_override","account_id":"acct-1","sessionId":"sid-1","msg":"rate_limit_dropped"}
2026-05-17T23:55:01.4388716Z apps/server test:  [32m✓[39m test/health.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:55:01.6695018Z apps/client test:  [32m✓[39m src/__test__/colyseus-client.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 17[2mms[22m[39m
2026-05-17T23:55:02.1902790Z apps/server test: [90mstdout[2m | test/tick-accumulator.test.ts
2026-05-17T23:55:02.1916980Z apps/server test: [22m[39m◇ injected env (50) from ../../../../../../../etc/environment // tip: ⌘ enable debugging { debug: true }
2026-05-17T23:55:02.1936849Z apps/server test: ℹ️  optional .env file not found: .env.test, .env
2026-05-17T23:55:02.8495011Z apps/client test:  [32m✓[39m src/__test__/chat-hud.test.ts [2m([22m[2m12 tests[22m[2m)[22m[32m 146[2mms[22m[39m
2026-05-17T23:55:02.9473306Z apps/server test:  [32m✓[39m test/tick-accumulator.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:55:03.2667295Z apps/server test:  [32m✓[39m test/protocol-monotonic-int.unit.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:55:03.2825342Z apps/server test: [2m Test Files [22m [1m[32m16 passed[39m[22m[90m (16)[39m
2026-05-17T23:55:03.2834151Z apps/server test: [2m      Tests [22m [1m[32m89 passed[39m[22m[90m (89)[39m
2026-05-17T23:55:03.2873986Z apps/server test: [2m   Start at [22m 23:54:55
2026-05-17T23:55:03.2898633Z apps/server test: [2m   Duration [22m 8.23s[2m (transform 549ms, setup 0ms, import 3.74s, tests 1.25s, environment 2ms)[22m
2026-05-17T23:55:03.3198150Z apps/server test: Done
2026-05-17T23:55:03.6228950Z apps/client test:  [32m✓[39m src/__test__/sprite-state-machine.test.ts [2m([22m[2m29 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T23:55:04.2345557Z apps/client test:  [32m✓[39m src/__test__/login-scene.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-17T23:55:04.9765314Z apps/client test:  [32m✓[39m src/__test__/reconnect.test.ts [2m([22m[2m16 tests[22m[2m)[22m[32m 69[2mms[22m[39m
2026-05-17T23:55:05.6394484Z apps/client test:  [32m✓[39m src/__test__/esc-menu.test.ts [2m([22m[2m12 tests[22m[2m)[22m[32m 82[2mms[22m[39m
2026-05-17T23:55:06.2418935Z apps/client test:  [32m✓[39m src/__test__/input-dispatcher.test.ts [2m([22m[2m13 tests[22m[2m)[22m[32m 15[2mms[22m[39m
2026-05-17T23:55:06.8431883Z apps/client test:  [32m✓[39m src/__test__/player-renderer-stale-anim.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T23:55:07.4428746Z apps/client test:  [32m✓[39m src/__test__/player-renderer.teleport.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T23:55:08.0578107Z apps/client test:  [32m✓[39m src/__test__/player-renderer-spawn-delay.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 19[2mms[22m[39m
2026-05-17T23:55:08.7023730Z apps/client test:  [32m✓[39m src/__test__/position-dispatcher.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-17T23:55:09.3070775Z apps/client test:  [32m✓[39m src/__test__/nameplate-color.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 30[2mms[22m[39m
2026-05-17T23:55:09.9587167Z apps/client test: [90mstderr[2m | src/__test__/background-renderer.test.ts[2m > [22m[2mBackgroundRenderer — wrap math (sim-tick pure state)[2m > [22m[2mD-64 round-4: dispose() survives a group whose .clear() throws (scene-shutdown race)
2026-05-17T23:55:09.9590556Z apps/client test: [22m[39mBackgroundRenderer.dispose: group.clear threw (likely scene-shutdown race) Cannot read properties of undefined (reading 'size')
2026-05-17T23:55:09.9628609Z apps/client test:  [32m✓[39m src/__test__/background-renderer.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 75[2mms[22m[39m
2026-05-17T23:55:10.5559005Z apps/client test:  [32m✓[39m src/__test__/room-renderer.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T23:55:11.1995063Z apps/client test:  [32m✓[39m src/__test__/force-reset-overlay.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 68[2mms[22m[39m
2026-05-17T23:55:11.7835956Z apps/client test:  [32m✓[39m src/__test__/reconciler.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T23:55:12.3794381Z apps/client test:  [32m✓[39m src/__test__/prediction.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T23:55:12.9656009Z apps/client test:  [32m✓[39m src/__test__/extrapolation.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T23:55:13.5471348Z apps/client test:  [32m✓[39m src/__test__/sprite-state-rate.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T23:55:14.1290197Z apps/client test:  [32m✓[39m src/__test__/room-layout-verify.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-17T23:55:14.7250402Z apps/client test:  [32m✓[39m src/__test__/input-dispatcher-shift.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:55:15.3174550Z apps/client test:  [32m✓[39m src/__test__/canvas-rect-tracker.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T23:55:15.9048407Z apps/client test:  [32m✓[39m src/__test__/boot-font-gate.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T23:55:16.4900763Z apps/client test:  [32m✓[39m src/__test__/legacy-origin.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 3[2mms[22m[39m
2026-05-17T23:55:17.1446798Z apps/client test:  [32m✓[39m src/__test__/auth-client.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T23:55:17.7141959Z apps/client test:  [32m✓[39m src/__test__/room-collision-bottom-edge.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T23:55:18.3054304Z apps/client test:  [32m✓[39m src/__test__/depth-set.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 3[2mms[22m[39m
2026-05-17T23:55:18.8782610Z apps/client test:  [32m✓[39m src/__test__/atlas-loader.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:55:19.4827948Z apps/client test:  [32m✓[39m src/__test__/protocol-version-check.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T23:55:20.0881330Z apps/client test:  [32m✓[39m src/__test__/integer-zoom.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 3[2mms[22m[39m
2026-05-17T23:55:20.6740682Z apps/client test:  [32m✓[39m src/__test__/env.test.ts [2m([22m[2m5 tests[22m[2m | [22m[33m4 skipped[39m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T23:55:20.6928869Z apps/client test: [2m Test Files [22m [1m[32m35 passed[39m[22m[90m (35)[39m
2026-05-17T23:55:20.6930264Z apps/client test: [2m      Tests [22m [1m[32m255 passed[39m[22m[2m | [22m[90m4 todo[39m[90m (259)[39m
2026-05-17T23:55:20.6931293Z apps/client test: [2m   Start at [22m 23:54:55
2026-05-17T23:55:20.6933366Z apps/client test: [2m   Duration [22m 25.51s[2m (transform 938ms, setup 69ms, collect 1.82s, tests 1.14s, environment 14.37s, prepare 2.99s)[22m
2026-05-17T23:55:20.8134792Z apps/client test: Done
2026-05-17T23:55:20.8192649Z 
2026-05-17T23:55:20.8196012Z verify-phase-4: OK (12 steps green)
2026-05-17T23:55:20.8280465Z 
2026-05-17T23:55:20.8281091Z === Workspace: typecheck ===
2026-05-17T23:55:20.8281826Z >>> pnpm -r typecheck
2026-05-17T23:55:21.1281461Z Scope: 5 of 6 workspace projects
2026-05-17T23:55:21.1329798Z packages/db typecheck$ tsc --noEmit
2026-05-17T23:55:21.1338140Z packages/game-logic typecheck$ tsc --noEmit
2026-05-17T23:55:23.5853995Z packages/game-logic typecheck: Done
2026-05-17T23:55:23.5858251Z packages/protocol typecheck$ tsc --noEmit
2026-05-17T23:55:25.5067684Z packages/db typecheck: Done
2026-05-17T23:55:26.9495854Z packages/protocol typecheck: Done
2026-05-17T23:55:26.9502650Z apps/client typecheck$ tsc --noEmit
2026-05-17T23:55:26.9505896Z apps/server typecheck$ tsc --noEmit
2026-05-17T23:55:38.8239484Z apps/client typecheck: Done
2026-05-17T23:55:39.4614388Z apps/server typecheck: Done
2026-05-17T23:55:39.4688618Z 
2026-05-17T23:55:39.4689294Z === Lint: deploy-stack ===
2026-05-17T23:55:39.4690183Z >>> pnpm lint:deploy-stack
2026-05-17T23:55:39.7454751Z 
2026-05-17T23:55:39.7455713Z > rebno@0.0.0 lint:deploy-stack /home/runner/work/rebno/rebno
2026-05-17T23:55:39.7456630Z > node tools/scripts/lint-deploy-stack.mjs
2026-05-17T23:55:39.7457270Z 
2026-05-17T23:55:39.7757444Z lint-deploy-stack: OK
2026-05-17T23:55:39.7846494Z 
2026-05-17T23:55:39.7847223Z === Lint: deploy-stack test ===
2026-05-17T23:55:39.7848129Z >>> pnpm lint:deploy-stack:test
2026-05-17T23:55:40.0608136Z 
2026-05-17T23:55:40.0609178Z > rebno@0.0.0 lint:deploy-stack:test /home/runner/work/rebno/rebno
2026-05-17T23:55:40.0610188Z > node tools/scripts/lint-deploy-stack.test.mjs
2026-05-17T23:55:40.0610779Z 
2026-05-17T23:55:40.1229415Z PASS: lint-deploy-stack green
2026-05-17T23:55:40.1326809Z 
2026-05-17T23:55:40.1327509Z === ADR 0005 lint ===
2026-05-17T23:55:40.1328155Z >>> pnpm lint:adr:0005
2026-05-17T23:55:40.4096185Z 
2026-05-17T23:55:40.4097133Z > rebno@0.0.0 lint:adr:0005 /home/runner/work/rebno/rebno
2026-05-17T23:55:40.4098463Z > node tools/asset-catalog/scripts/lint-adr.mjs docs/adr/0005-deploy-topology.md --no-matrix
2026-05-17T23:55:40.4099329Z 
2026-05-17T23:55:40.4402121Z OK: ADR docs/adr/0005-deploy-topology.md validated (no-matrix mode — Michael Nygard sections present)
2026-05-17T23:55:40.4496188Z 
2026-05-17T23:55:40.4496938Z === ADR 0006 lint ===
2026-05-17T23:55:40.4497561Z >>> pnpm lint:adr:0006
2026-05-17T23:55:40.7278170Z 
2026-05-17T23:55:40.7279086Z > rebno@0.0.0 lint:adr:0006 /home/runner/work/rebno/rebno
2026-05-17T23:55:40.7280387Z > node tools/asset-catalog/scripts/lint-adr.mjs docs/adr/0006-observability-stack.md --no-matrix
2026-05-17T23:55:40.7281256Z 
2026-05-17T23:55:40.7591514Z OK: ADR docs/adr/0006-observability-stack.md validated (no-matrix mode — Michael Nygard sections present)
2026-05-17T23:55:40.7686288Z 
2026-05-17T23:55:40.7687029Z === Workspace: test ===
2026-05-17T23:55:40.7687629Z >>> pnpm -r test
2026-05-17T23:55:41.0564181Z Scope: 5 of 6 workspace projects
2026-05-17T23:55:41.0613215Z packages/db test$ vitest run
2026-05-17T23:55:41.0621318Z packages/game-logic test$ vitest run
2026-05-17T23:55:41.5455851Z packages/game-logic test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/game-logic[39m
2026-05-17T23:55:41.5470108Z packages/db test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/db[39m
2026-05-17T23:55:41.9145341Z packages/game-logic test:  [32m✓[39m test/platform-cycle.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 14[2mms[22m[39m
2026-05-17T23:55:42.1509464Z packages/game-logic test:  [32m✓[39m test/step-bno-fidelity.test.ts [2m([22m[2m13 tests[22m[2m)[22m[32m 14[2mms[22m[39m
2026-05-17T23:55:42.3876447Z packages/game-logic test:  [32m✓[39m test/golden.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T23:55:42.4862198Z packages/db test:  [32m✓[39m tests/schema-shape.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 12[2mms[22m[39m
2026-05-17T23:55:42.6098493Z packages/game-logic test:  [32m✓[39m test/walkable-edge.test.ts [2m([22m[2m11 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-17T23:55:42.8293314Z packages/game-logic test:  [32m✓[39m test/collision-axis-slide.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-17T23:55:43.0347221Z packages/game-logic test:  [32m✓[39m test/movement-constants.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:55:43.2511560Z packages/game-logic test:  [32m✓[39m test/rng.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 14[2mms[22m[39m
2026-05-17T23:55:43.2852188Z packages/db test:  [32m✓[39m tests/promotion.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:55:43.4581417Z packages/game-logic test:  [32m✓[39m test/sprite-state-machine.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T23:55:43.5111764Z packages/db test:  [32m✓[39m tests/save-format-traceability.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:55:43.5147853Z packages/db test: [2m Test Files [22m [1m[32m3 passed[39m[22m[90m (3)[39m
2026-05-17T23:55:43.5164102Z packages/db test: [2m      Tests [22m [1m[32m22 passed[39m[22m[90m (22)[39m
2026-05-17T23:55:43.5173886Z packages/db test: [2m   Start at [22m 23:55:41
2026-05-17T23:55:43.5199633Z packages/db test: [2m   Duration [22m 1.96s[2m (transform 181ms, setup 0ms, import 1.38s, tests 26ms, environment 0ms)[22m
2026-05-17T23:55:43.5393858Z packages/db test: Done
2026-05-17T23:55:43.5441275Z packages/protocol test$ vitest run
2026-05-17T23:55:43.6685664Z packages/game-logic test:  [32m✓[39m test/accumulator.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:55:43.9214802Z packages/game-logic test:  [32m✓[39m test/edge-parity.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T23:55:44.0385025Z packages/protocol test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/packages/protocol[39m
2026-05-17T23:55:44.1335637Z packages/game-logic test:  [32m✓[39m test/step-pass-through.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T23:55:44.3763490Z packages/game-logic test:  [32m✓[39m test/navi-mask-bbox.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 12[2mms[22m[39m
2026-05-17T23:55:44.4761343Z packages/protocol test:  [32m✓[39m test/codec.test.ts [2m([22m[2m18 tests[22m[2m)[22m[32m 22[2mms[22m[39m
2026-05-17T23:55:44.5841872Z packages/game-logic test:  [32m✓[39m test/wall-slide.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T23:55:44.7496297Z packages/protocol test:  [32m✓[39m test/intents.test.ts [2m([22m[2m25 tests[22m[2m)[22m[32m 19[2mms[22m[39m
2026-05-17T23:55:44.8045019Z packages/game-logic test:  [32m✓[39m test/run-speed.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T23:55:44.8185901Z packages/game-logic test: [2m Test Files [22m [1m[32m14 passed[39m[22m[90m (14)[39m
2026-05-17T23:55:44.8208866Z packages/game-logic test: [2m      Tests [22m [1m[32m75 passed[39m[22m[90m (75)[39m
2026-05-17T23:55:44.8212293Z packages/game-logic test: [2m   Start at [22m 23:55:41
2026-05-17T23:55:44.8214376Z packages/game-logic test: [2m   Duration [22m 3.26s[2m (transform 239ms, setup 0ms, import 510ms, tests 127ms, environment 2ms)[22m
2026-05-17T23:55:44.8515044Z packages/game-logic test: Done
2026-05-17T23:55:44.9245662Z packages/protocol test:  [32m✓[39m test/anim-state.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T23:55:45.0757476Z packages/protocol test:  [32m✓[39m test/state.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T23:55:45.2090630Z packages/protocol test:  [32m✓[39m test/schema-shape.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T23:55:45.2124398Z packages/protocol test: [2m Test Files [22m [1m[32m5 passed[39m[22m[90m (5)[39m
2026-05-17T23:55:45.2126214Z packages/protocol test: [2m      Tests [22m [1m[32m59 passed[39m[22m[90m (59)[39m
2026-05-17T23:55:45.2127632Z packages/protocol test: [2m   Start at [22m 23:55:44
2026-05-17T23:55:45.2129249Z packages/protocol test: [2m   Duration [22m 1.16s[2m (transform 180ms, setup 0ms, import 329ms, tests 56ms, environment 1ms)[22m
2026-05-17T23:55:45.2463819Z packages/protocol test: Done
2026-05-17T23:55:45.2468965Z apps/client test$ vitest run --exclude 'test/e2e/**'
2026-05-17T23:55:45.2470824Z apps/server test$ vitest run --exclude 'test/**/*.integ.test.ts'
2026-05-17T23:55:45.7704752Z apps/server test: [1m[30m[46m RUN [49m[39m[22m [36mv4.1.5 [39m[90m/home/runner/work/rebno/rebno/apps/server[39m
2026-05-17T23:55:45.8014707Z apps/client test: [1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/home/runner/work/rebno/rebno/apps/client[39m
2026-05-17T23:55:46.7170571Z apps/server test: {"level":30,"time":1779062146715,"pid":4591,"hostname":"runnervmrw5os","password":"[Redacted]","session_token":"[Redacted]","msg":"login"}
2026-05-17T23:55:46.7226371Z apps/server test:  [32m✓[39m test/otel-init.test.ts [2m([22m[2m4 tests[22m[2m)[22m[33m 669[2mms[22m[39m
2026-05-17T23:55:46.7243834Z apps/server test:      [33m[2m✓[22m[39m does not throw when OTEL_EXPORTER_OTLP_ENDPOINT is unset [33m 530[2mms[22m[39m
2026-05-17T23:55:47.7065776Z apps/client test: [90mstderr[2m | src/__test__/game-scene.test.ts[2m > [22m[2mscenes/GameScene[2m > [22m[2mtest 5: onRoomLayout calls verifyRoomLayout first; render skipped on false
2026-05-17T23:55:47.7085055Z apps/client test: [22m[39mroom_layout signature did not verify — rendering anyway (defense-in-depth; see 06.1-D40-SPIKE.md) mvp-lobby 000
2026-05-17T23:55:47.8055040Z apps/client test:  [32m✓[39m src/__test__/game-scene.test.ts [2m([22m[2m11 tests[22m[2m)[22m[32m 254[2mms[22m[39m
2026-05-17T23:55:47.8775415Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 1: fresh DB — migrate creates accounts table and records migration row
2026-05-17T23:55:47.8777291Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-jU2nvb/rebno.db
2026-05-17T23:55:47.8793491Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T23:55:47.9875340Z apps/server test: [90mstderr[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 1: fresh DB — migrate creates accounts table and records migration row
2026-05-17T23:55:47.9877605Z apps/server test: [22m[39m[run-migrations] uat-seed soft-failed (continuing): SqliteError: no such table: user
2026-05-17T23:55:47.9899851Z apps/server test:     at Database.prepare (/home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/better-sqlite3@12.9.0/node_modules/[4mbetter-sqlite3[24m/lib/methods/wrappers.js:5:21)
2026-05-17T23:55:47.9920893Z apps/server test:     at seedOne [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:62:10[90m)[39m
2026-05-17T23:55:47.9924750Z apps/server test:     at seedUatAccounts [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:108:11[90m)[39m
2026-05-17T23:55:47.9927025Z apps/server test:     at main [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/run-migrations.js:176:15[90m)[39m
2026-05-17T23:55:47.9946548Z apps/server test: [90m    at processTicksAndRejections (node:internal/process/task_queues:103:5)[39m
2026-05-17T23:55:47.9951050Z apps/server test:     at [90m/home/runner/work/rebno/rebno/apps/server/[39mtest/run-migrations.test.ts:44:18
2026-05-17T23:55:47.9964284Z apps/server test:     at file:///home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/@vitest+runner@4.1.5/node_modules/[4m@vitest/runner[24m/dist/chunk-artifact.js:1903:20 {
2026-05-17T23:55:47.9969027Z apps/server test:   code: [32m'SQLITE_ERROR'[39m
2026-05-17T23:55:47.9970562Z apps/server test: }
2026-05-17T23:55:47.9987482Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 1: fresh DB — migrate creates accounts table and records migration row
2026-05-17T23:55:48.0000885Z apps/server test: [22m[39m[run-migrations] OK
2026-05-17T23:55:48.0004223Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 2: pre-bootstrapped DB (Assumption A7) — reconcile seeds row before migrate runs
2026-05-17T23:55:48.0007186Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-N3glqM/rebno.db
2026-05-17T23:55:48.0046392Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T23:55:48.0074347Z apps/server test: [run-migrations] reconciled __drizzle_migrations for pre-bootstrap DB (Assumption A7) — seeded 0001_baseline
2026-05-17T23:55:48.0125715Z apps/server test: [90mstderr[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 2: pre-bootstrapped DB (Assumption A7) — reconcile seeds row before migrate runs
2026-05-17T23:55:48.0141339Z apps/server test: [22m[39m[run-migrations] uat-seed soft-failed (continuing): SqliteError: no such table: user
2026-05-17T23:55:48.0188035Z apps/server test:     at Database.prepare (/home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/better-sqlite3@12.9.0/node_modules/[4mbetter-sqlite3[24m/lib/methods/wrappers.js:5:21)
2026-05-17T23:55:48.0213817Z apps/server test:     at seedOne [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:62:10[90m)[39m
2026-05-17T23:55:48.0227036Z apps/server test:     at seedUatAccounts [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:108:11[90m)[39m
2026-05-17T23:55:48.0274658Z apps/server test:     at main [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/run-migrations.js:176:15[90m)[39m
2026-05-17T23:55:48.0304131Z apps/server test: [90m    at processTicksAndRejections (node:internal/process/task_queues:103:5)[39m
2026-05-17T23:55:48.0336929Z apps/server test:     at [90m/home/runner/work/rebno/rebno/apps/server/[39mtest/run-migrations.test.ts:72:18
2026-05-17T23:55:48.0340969Z apps/server test:     at file:///home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/@vitest+runner@4.1.5/node_modules/[4m@vitest/runner[24m/dist/chunk-artifact.js:1903:20 {
2026-05-17T23:55:48.0344036Z apps/server test:   code: [32m'SQLITE_ERROR'[39m
2026-05-17T23:55:48.0363329Z apps/server test: }
2026-05-17T23:55:48.0365753Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 2: pre-bootstrapped DB (Assumption A7) — reconcile seeds row before migrate runs
2026-05-17T23:55:48.0383778Z apps/server test: [22m[39m[run-migrations] OK
2026-05-17T23:55:48.0424880Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T23:55:48.0444233Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-jA2Czf/rebno.db
2026-05-17T23:55:48.0474203Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T23:55:48.0484643Z apps/server test: [90mstderr[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T23:55:48.0504377Z apps/server test: [22m[39m[run-migrations] uat-seed soft-failed (continuing): SqliteError: no such table: user
2026-05-17T23:55:48.0514954Z apps/server test:     at Database.prepare (/home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/better-sqlite3@12.9.0/node_modules/[4mbetter-sqlite3[24m/lib/methods/wrappers.js:5:21)
2026-05-17T23:55:48.0544434Z apps/server test:     at seedOne [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:62:10[90m)[39m
2026-05-17T23:55:48.0564320Z apps/server test:     at seedUatAccounts [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:108:11[90m)[39m
2026-05-17T23:55:48.0566389Z apps/server test:     at main [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/run-migrations.js:176:15[90m)[39m
2026-05-17T23:55:48.0584048Z apps/server test: [90m    at processTicksAndRejections (node:internal/process/task_queues:103:5)[39m
2026-05-17T23:55:48.0604235Z apps/server test:     at [90m/home/runner/work/rebno/rebno/apps/server/[39mtest/run-migrations.test.ts:91:19
2026-05-17T23:55:48.0624863Z apps/server test:     at file:///home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/@vitest+runner@4.1.5/node_modules/[4m@vitest/runner[24m/dist/chunk-artifact.js:1903:20 {
2026-05-17T23:55:48.0636306Z apps/server test:   code: [32m'SQLITE_ERROR'[39m
2026-05-17T23:55:48.0663365Z apps/server test: }
2026-05-17T23:55:48.0665289Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T23:55:48.0683650Z apps/server test: [22m[39m[run-migrations] OK
2026-05-17T23:55:48.0704611Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T23:55:48.0724100Z apps/server test: [22m[39m[run-migrations] opening /tmp/rebno-migrate-test-jA2Czf/rebno.db
2026-05-17T23:55:48.0725700Z apps/server test: [run-migrations] migrationsFolder=/home/runner/work/rebno/rebno/packages/db/migrations
2026-05-17T23:55:48.0744888Z apps/server test: [90mstdout[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T23:55:48.0763930Z apps/server test: [22m[39m[run-migrations] OK
2026-05-17T23:55:48.0784631Z apps/server test: [90mstderr[2m | test/run-migrations.test.ts[2m > [22m[2mrun-migrations.ts (Plan 12)[2m > [22m[2mScenario 3: idempotent second run — no error, no extra rows
2026-05-17T23:55:48.0794630Z apps/server test: [22m[39m[run-migrations] uat-seed soft-failed (continuing): SqliteError: no such table: user
2026-05-17T23:55:48.0814940Z apps/server test:     at Database.prepare (/home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/better-sqlite3@12.9.0/node_modules/[4mbetter-sqlite3[24m/lib/methods/wrappers.js:5:21)
2026-05-17T23:55:48.0824519Z apps/server test:     at seedOne [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:62:10[90m)[39m
2026-05-17T23:55:48.0844479Z apps/server test:     at seedUatAccounts [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/seed-uat-accounts.js:108:11[90m)[39m
2026-05-17T23:55:48.0864545Z apps/server test:     at main [90m(/home/runner/work/rebno/rebno/apps/server/[39mscripts/run-migrations.js:176:15[90m)[39m
2026-05-17T23:55:48.0884529Z apps/server test: [90m    at processTicksAndRejections (node:internal/process/task_queues:103:5)[39m
2026-05-17T23:55:48.0904244Z apps/server test:     at [90m/home/runner/work/rebno/rebno/apps/server/[39mtest/run-migrations.test.ts:93:20
2026-05-17T23:55:48.0924599Z apps/server test:     at file:///home/runner/work/rebno/rebno/node_modules/[4m.pnpm[24m/@vitest+runner@4.1.5/node_modules/[4m@vitest/runner[24m/dist/chunk-artifact.js:1903:20 {
2026-05-17T23:55:48.0963962Z apps/server test:   code: [32m'SQLITE_ERROR'[39m
2026-05-17T23:55:48.0993525Z apps/server test: }
2026-05-17T23:55:48.1029638Z apps/server test:  [32m✓[39m test/run-migrations.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 180[2mms[22m[39m
2026-05-17T23:55:48.4249954Z apps/server test:  [32m✓[39m test/layout-derive.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 113[2mms[22m[39m
2026-05-17T23:55:49.0024948Z apps/client test:  [32m✓[39m src/__test__/chat-hud.test.ts [2m([22m[2m12 tests[22m[2m)[22m[32m 147[2mms[22m[39m
2026-05-17T23:55:49.4101430Z apps/server test:  [32m✓[39m test/persistence.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 58[2mms[22m[39m
2026-05-17T23:55:49.6437023Z apps/server test:  [32m✓[39m test/room-key.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 21[2mms[22m[39m
2026-05-17T23:55:49.9843849Z apps/server test: {"level":40,"time":1779062149979,"pid":4701,"hostname":"runnervmrw5os","msg_type":"set_sprite_override","sessionId":"sid-1","issue":"[\n  {\n    \"received\": \"admin_form\",\n    \"code\": \"invalid_enum_value\",\n    \"options\": [\n      \"hexport_in\",\n      \"hexport_out\",\n      \"tele_in\",\n      \"tele_out\",\n      \"ncol_1\",\n      \"ncol_2\",\n      \"ncol_3\",\n      \"ncol_4\",\n      \"jokershell\",\n      \"watching\",\n      \"none\"\n    ],\n    \"path\": [\n      \"sprite_id\"\n    ],\n    \"message\": \"Invalid enum value. Expected 'hexport_in' | 'hexport_out' | 'tele_in' | 'tele_out' | 'ncol_1' | 'ncol_2' | 'ncol_3' | 'ncol_4' | 'jokershell' | 'watching' | 'none', received 'admin_form'\"\n  }\n]","msg":"invalid_intent"}
2026-05-17T23:55:49.9903191Z apps/server test:  [32m✓[39m test/sprite-override.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 15[2mms[22m[39m
2026-05-17T23:55:49.9925483Z apps/server test: {"level":40,"time":1779062149981,"pid":4701,"hostname":"runnervmrw5os","msg_type":"set_sprite_override","account_id":"acct-1","sessionId":"sid-1","msg":"rate_limit_dropped"}
2026-05-17T23:55:50.2441282Z apps/client test:  [32m✓[39m src/__test__/sprite-state-machine.teleport-gate.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 96[2mms[22m[39m
2026-05-17T23:55:50.3036294Z apps/server test: {"level":40,"time":1779062150298,"pid":4712,"hostname":"runnervmrw5os","msg_type":"position_update","sessionId":"sid-1","issue":"[\n  {\n    \"code\": \"unrecognized_keys\",\n    \"keys\": [\n      \"account_id\"\n    ],\n    \"path\": [],\n    \"message\": \"Unrecognized key(s) in object: 'account_id'\"\n  }\n]","msg":"invalid_intent"}
2026-05-17T23:55:50.3074494Z apps/server test:  [32m✓[39m test/position-update.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 16[2mms[22m[39m
2026-05-17T23:55:50.3154752Z apps/server test: {"level":40,"time":1779062150300,"pid":4712,"hostname":"runnervmrw5os","msg_type":"position_update","account_id":"acct-1","sessionId":"sid-1","msg":"rate_limit_dropped"}
2026-05-17T23:55:50.5589509Z apps/server test:  [32m✓[39m test/log.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 24[2mms[22m[39m
2026-05-17T23:55:50.8430034Z apps/server test:  [32m✓[39m test/legacy-login.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 25[2mms[22m[39m
2026-05-17T23:55:51.0696868Z apps/server test:  [32m✓[39m test/rate-limit.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-17T23:55:51.3572498Z apps/server test:  [32m✓[39m test/static-assets.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 19[2mms[22m[39m
2026-05-17T23:55:51.3859782Z apps/client test:  [32m✓[39m src/__test__/esc-menu.test.ts [2m([22m[2m12 tests[22m[2m)[22m[32m 142[2mms[22m[39m
2026-05-17T23:55:51.6184667Z apps/server test: {"level":40,"time":1779062151610,"pid":4776,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-17T23:55:51.6209979Z apps/server test:  [32m✓[39m test/staging-invite.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 12[2mms[22m[39m
2026-05-17T23:55:51.6255517Z apps/server test: {"level":40,"time":1779062151614,"pid":4776,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-17T23:55:51.6314390Z apps/server test: {"level":40,"time":1779062151614,"pid":4776,"hostname":"runnervmrw5os","path":"/api/foo","msg":"staging_invite_rejected"}
2026-05-17T23:55:51.8915164Z apps/server test:  [32m✓[39m test/protocol-monotonic-int.unit.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:55:52.1209900Z apps/server test:  [32m✓[39m test/admin-stubs.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 9[2mms[22m[39m
2026-05-17T23:55:52.5646556Z apps/client test: [90mstderr[2m | src/__test__/background-renderer.test.ts[2m > [22m[2mBackgroundRenderer — wrap math (sim-tick pure state)[2m > [22m[2mD-64 round-4: dispose() survives a group whose .clear() throws (scene-shutdown race)
2026-05-17T23:55:52.5691946Z apps/client test: [22m[39mBackgroundRenderer.dispose: group.clear threw (likely scene-shutdown race) Cannot read properties of undefined (reading 'size')
2026-05-17T23:55:52.5704527Z apps/client test:  [32m✓[39m src/__test__/background-renderer.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 192[2mms[22m[39m
2026-05-17T23:55:52.8720528Z apps/server test: [90mstdout[2m | test/tick-accumulator.test.ts
2026-05-17T23:55:52.8752695Z apps/server test: [22m[39m◇ injected env (50) from ../../../../../../../etc/environment // tip: ⌘ enable debugging { debug: true }
2026-05-17T23:55:52.8754918Z apps/server test: ℹ️  optional .env file not found: .env.test, .env
2026-05-17T23:55:53.6123082Z apps/server test:  [32m✓[39m test/tick-accumulator.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:55:53.8214514Z apps/server test:  [32m✓[39m test/health.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:55:53.8223608Z apps/client test:  [32m✓[39m src/__test__/reconnect.test.ts [2m([22m[2m16 tests[22m[2m)[22m[32m 119[2mms[22m[39m
2026-05-17T23:55:53.8279403Z apps/server test: [2m Test Files [22m [1m[32m16 passed[39m[22m[90m (16)[39m
2026-05-17T23:55:53.8304595Z apps/server test: [2m      Tests [22m [1m[32m89 passed[39m[22m[90m (89)[39m
2026-05-17T23:55:53.8305913Z apps/server test: [2m   Start at [22m 23:55:45
2026-05-17T23:55:53.8324566Z apps/server test: [2m   Duration [22m 8.04s[2m (transform 623ms, setup 0ms, import 3.69s, tests 1.19s, environment 2ms)[22m
2026-05-17T23:55:53.8734343Z apps/server test: Done
2026-05-17T23:55:54.4692791Z apps/client test:  [32m✓[39m src/__test__/force-reset-overlay.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 66[2mms[22m[39m
2026-05-17T23:55:55.0871602Z apps/client test:  [32m✓[39m src/__test__/nameplate.test.ts [2m([22m[2m12 tests[22m[2m)[22m[32m 37[2mms[22m[39m
2026-05-17T23:55:55.7117912Z apps/client test:  [32m✓[39m src/__test__/nameplate-stability.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 22[2mms[22m[39m
2026-05-17T23:55:56.3240019Z apps/client test:  [32m✓[39m src/__test__/nameplate-color.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 29[2mms[22m[39m
2026-05-17T23:55:56.9274452Z apps/client test:  [32m✓[39m src/__test__/player-renderer-spawn-delay.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 18[2mms[22m[39m
2026-05-17T23:55:57.5443623Z apps/client test:  [32m✓[39m src/__test__/colyseus-client.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 11[2mms[22m[39m
2026-05-17T23:55:58.1561449Z apps/client test:  [32m✓[39m src/__test__/input-dispatcher.test.ts [2m([22m[2m13 tests[22m[2m)[22m[32m 16[2mms[22m[39m
2026-05-17T23:55:58.7597438Z apps/client test:  [32m✓[39m src/__test__/player-renderer.teleport.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T23:55:59.3343944Z apps/client test:  [32m✓[39m src/__test__/canvas-rect-tracker.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T23:55:59.9343127Z apps/client test:  [32m✓[39m src/__test__/player-renderer-stale-anim.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 13[2mms[22m[39m
2026-05-17T23:56:00.5287566Z apps/client test:  [32m✓[39m src/__test__/login-scene.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 10[2mms[22m[39m
2026-05-17T23:56:01.1056402Z apps/client test:  [32m✓[39m src/__test__/room-layout-verify.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-17T23:56:01.7204179Z apps/client test:  [32m✓[39m src/__test__/position-dispatcher.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-17T23:56:02.2940189Z apps/client test:  [32m✓[39m src/__test__/input-dispatcher-shift.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:56:02.8880089Z apps/client test:  [32m✓[39m src/__test__/atlas-loader.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:56:03.4877913Z apps/client test:  [32m✓[39m src/__test__/boot-font-gate.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T23:56:04.0895208Z apps/client test:  [32m✓[39m src/__test__/reconciler.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 7[2mms[22m[39m
2026-05-17T23:56:04.7372255Z apps/client test:  [32m✓[39m src/__test__/auth-client.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 6[2mms[22m[39m
2026-05-17T23:56:05.3588400Z apps/client test:  [32m✓[39m src/__test__/sprite-state-machine.test.ts [2m([22m[2m29 tests[22m[2m)[22m[32m 8[2mms[22m[39m
2026-05-17T23:56:05.9291803Z apps/client test:  [32m✓[39m src/__test__/room-collision-bottom-edge.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T23:56:06.5436273Z apps/client test:  [32m✓[39m src/__test__/prediction.test.ts [2m([22m[2m6 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T23:56:07.1309913Z apps/client test:  [32m✓[39m src/__test__/extrapolation.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 5[2mms[22m[39m
2026-05-17T23:56:07.7076668Z apps/client test:  [32m✓[39m src/__test__/room-renderer.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T23:56:08.2799112Z apps/client test:  [32m✓[39m src/__test__/protocol-version-check.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T23:56:08.8701437Z apps/client test:  [32m✓[39m src/__test__/sprite-state-rate.test.ts [2m([22m[2m5 tests[22m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T23:56:09.4710557Z apps/client test:  [32m✓[39m src/__test__/env.test.ts [2m([22m[2m5 tests[22m[2m | [22m[33m4 skipped[39m[2m)[22m[32m 4[2mms[22m[39m
2026-05-17T23:56:10.0536885Z apps/client test:  [32m✓[39m src/__test__/legacy-origin.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 3[2mms[22m[39m
2026-05-17T23:56:10.6262592Z apps/client test:  [32m✓[39m src/__test__/integer-zoom.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 3[2mms[22m[39m
2026-05-17T23:56:11.2068467Z apps/client test:  [32m✓[39m src/__test__/depth-set.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 3[2mms[22m[39m
2026-05-17T23:56:11.2244942Z apps/client test: [2m Test Files [22m [1m[32m35 passed[39m[22m[90m (35)[39m
2026-05-17T23:56:11.2251239Z apps/client test: [2m      Tests [22m [1m[32m255 passed[39m[22m[2m | [22m[90m4 todo[39m[90m (259)[39m
2026-05-17T23:56:11.2257457Z apps/client test: [2m   Start at [22m 23:55:45
2026-05-17T23:56:11.2260992Z apps/client test: [2m   Duration [22m 25.42s[2m (transform 953ms, setup 97ms, collect 1.87s, tests 1.29s, environment 14.18s, prepare 2.92s)[22m
2026-05-17T23:56:11.3533719Z apps/client test: Done
2026-05-17T23:56:11.3597683Z 
2026-05-17T23:56:11.3598387Z verify-phase-5: OK (7 steps green)
